/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.List;

/**
 * JSON通用类(JSON)
 *
 * @author SoChishun
 * @version 1.0 2016-5-18
 * @see http://blog.csdn.net/accountwcx/article/details/24585987
 */
public class JacksonUtil {

    /**
     * JSON序列化
     * <p>
     * content = JsonUtil.serialize(conninfo);<br />
     * FileUtil.writeFile(con_path, content);
     * </p>
     *
     * @param object
     * @return
     * @throws JsonProcessingException
     * @version 1.0 2016-5-18
     */
    public static String serialize(Object object) throws JsonProcessingException {
        /**
         * ObjectMapper是JSON操作的核心，Jackson的所有JSON操作都是在ObjectMapper中实现。 ObjectMapper有多个JSON序列化的方法，可以把JSON字符串保存File、OutputStream等不同的介质中。 writeValue(File arg0, Object arg1)把arg1转成json序列，并保存到arg0文件中。 writeValue(OutputStream arg0, Object arg1)把arg1转成json序列，并保存到arg0输出流中。 writeValueAsBytes(Object arg0)把arg0转成json序列，并把结果输出成字节数组。 writeValueAsString(Object arg0)把arg0转成json序列，并把结果输出成字符串。
         */
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(object);
    }

    /**
     * JSON反序列化
     * 
     * <p>deserialize(ConnectionInfo.class, FileUtil.readFile(con_path));</p>
     * @param <T>
     * @param c
     * @param json
     * @return 返回
     * @throws IOException
     * @version 1.0 2016-5-18
     */
    public static <T> T deserialize(Class<T> c, String json) throws IOException {
        /**
         * ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
         */
        ObjectMapper mapper = new ObjectMapper();
        T t = mapper.readValue(json, c);
        return t;
    }
}
